package cn.e4j.modular.crm.service.impl;

import cn.e4j.core.dto.impl.Dto;
import cn.e4j.core.shiro.ShiroKit;
import cn.e4j.core.shiro.ShiroUser;
import cn.e4j.core.util.DateUtils;
import cn.e4j.modular.crm.entity.GwerT;
import cn.e4j.modular.crm.mapper.GwerTMapper;
import cn.e4j.modular.crm.service.GwerTService;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author shixc
 * @since 2019-01-16
 */
@Service
public class GwerTServiceImpl extends ServiceImpl<GwerTMapper, GwerT> implements GwerTService {
    @Transactional(readOnly = true)
    public List<Map<String, Object>> getList(Page<Object> page, Dto dto) {

        List<Map<String, Object>> gwapDtos = this.baseMapper.listPage(page, dto);

        return gwapDtos;
    }

    @Transactional(readOnly = true)
    public List<Map<String, Object>> getGwamList(Dto dto) {

        List<Map<String, Object>> gwamDtos = this.baseMapper.getGwamList(dto);

        return gwamDtos;
    }

    @Transactional(readOnly = true)
    public List<Map<String, Object>> getGwacList(Dto dto) {

        List<Map<String, Object>> gwacDtos = this.baseMapper.getGwacList(dto);

        return gwacDtos;
    }

    @Transactional(readOnly = true)
    public List<Map<String, Object>> getGwabList(Dto dto) {

        List<Map<String, Object>> gwabDtos = this.baseMapper.getGwabList(dto);

        return gwabDtos;
    }

    @Transactional(readOnly = true)
    public GwerT getByKey(String GWERENT, String GWER001, String GWER004, String GWERPLANT) {
        GwerT gwap = this.baseMapper.getByKey(GWERENT, GWER001, GWER004, GWERPLANT);
        return gwap;
    }

    @Transactional
    @Override
    public void add(GwerT gwerT) {
        ShiroUser shiroUser = ShiroKit.getUser();
        gwerT.setGWER011(" ");
        gwerT.setGWERACTI("Y");
        gwerT.setGWERENT(shiroUser.getDBC());
        gwerT.setGWERUSER(shiroUser.getACCOUNT());
        gwerT.setGWERGRUP(shiroUser.getORG_ID());
        gwerT.setGWERDATE(LocalDate.now());
        gwerT.setGWERTIME(DateUtils.formatDate(new Date(), "HH:mm:ss"));
        gwerT.setGWERORIG(shiroUser.getORG_ID());
        gwerT.setGWERORIU(shiroUser.getACCOUNT());
        gwerT.insert();
    }

    @Transactional
    @Override
    public void edit(GwerT gwer) {
        ShiroUser shiroUser = ShiroKit.getUser();
        gwer.setGWERMODU(shiroUser.getACCOUNT());
        UpdateWrapper<GwerT> gwerTUpdateWrapper = new UpdateWrapper<>();
        gwerTUpdateWrapper.eq("GWERENT", gwer.getGWERENT());
        gwerTUpdateWrapper.eq("GWER001", gwer.getGWER001());
        gwerTUpdateWrapper.eq("GWER004", gwer.getGWER004());
        gwerTUpdateWrapper.eq("GWERPLANT", gwer.getGWERPLANT());
        gwer.update(gwerTUpdateWrapper);
    }

    @Transactional
    @Override
    public void delete(GwerT gwerT) {
        UpdateWrapper<GwerT> gwerTUpdateWrapper = new UpdateWrapper<>();
        gwerTUpdateWrapper.eq("GWERENT", gwerT.getGWERENT());
        gwerTUpdateWrapper.eq("GWER001", gwerT.getGWER001());
        gwerTUpdateWrapper.eq("GWER004", gwerT.getGWER004());
        gwerTUpdateWrapper.eq("GWERPLANT", gwerT.getGWERPLANT());
        gwerT.delete(gwerTUpdateWrapper);
    }

    @Transactional
    @Override
    public void delDataBatch(List<GwerT> gwapTList) {
        for (GwerT gwerT : gwapTList) {
            UpdateWrapper<GwerT> gwerTUpdateWrapper = new UpdateWrapper<>();
            gwerTUpdateWrapper.eq("GWERENT", gwerT.getGWERENT());
            gwerTUpdateWrapper.eq("GWER001", gwerT.getGWER001());
            gwerTUpdateWrapper.eq("GWER004", gwerT.getGWER004());
            gwerTUpdateWrapper.eq("GWERPLANT", gwerT.getGWERPLANT());
            gwerT.delete(gwerTUpdateWrapper);
        }
    }
}
